C'est aussi un site web http://php.net/ rempli d'autres informations utiles.
Reprenons l'architecture client serveur ; pour une page statique (HTML) :
pour une page dynamique (PHP) :
PHP est interprété côté serveur :
JavaScript :
- Parce que les données sont centralisées sur le serveur.
- Parce que le résultat de l'éxécution sera identique pour tous les clients.
- Parce que ces données brutes manipulées par le serveur sont inacessibles par les clients.
Mais il existe bien sûr d'autres concurrents : ASP.NET, Ruby on Rails, JSP (Java EE), ...
Note
Il est aussi possible d'utiliser les balises courtes <? et ?> pour signaler du code PHP. On préférera toutefois les balises longues qui assurent une portabilité totale sur tous les serveurs et avec toutes les versions de PHP.
1 2 3 4 5 6 7 8 9 10 11 | <!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>Ma première page en PHP !</title>
</head>
<body>
<?php echo("Ce texte est écrit
par du script PHP!"); ?>
</body>
</html>
|
Note
L'instruction echo est une fonction PHP. Elle permet d'écrire la chaîne de caractères passée en paramètre dans le fichier HTML généré.
Cet exemple est aussi un script PHP valide :
<?php echo("Ce texte est écrit par du script PHP!"); ?>
Mais ce fichier ne générera en revanche pas un fichier HTML valide.
Astuce
Nous verrons par la suite qu'il est possible d'intégrer un fichier PHP dans un autre, ce qui donne tout son intérêt à concevoir des fichiers PHP réduits, mais génériques.
Voir le résultat attendu.
En PHP, il est possible d'utiliser la mémoire du serveur afin d'y stocker des informations durant l'éxécution du script PHP, dans des variables qui :
s'écrivent avec un identifiant précédé d'un $, par exemple $ma_variable,
ne se déclarent pas, c'est l'affectation qui détermine leur type :
- booléen (true/false) ;
- nombre entier ;
- flottants (nombre à virgule) ;
- chaîne de caractères (entre ") ;
- tableau ;
- ou même un objet (programmation orientée objet).
<?php
$age=21;
echo("Vous avez $age ans !");
?>
Résultat HTML :
Vous avez 21 ans !
Les chaînes de caractères affectées à une variable sont écrites entre " ou entre '.
Exemple :
<?php
$phrase1="Ma chaîne de caractères";
$phrase2='Ma chaîne de caractères';
?>
Il est possible d'intégrer la valeur d'une variable à une chaîne de caractères. Cela se nomme la concaténation
La syntaxe de PHP permet de simplifier la concaténation de chaînes de caractères entre elles ou avec des variables.
La syntaxe est différente suivant les délimiteurs utilisés :
<?php
$mot1="phrase";
$mot2=8;
echo("Voici une $mot1 composée de $mot2 mots.\n");
echo('Voici une $mot1 composée de $mot2 mots.'."\n");
echo('Voici une '.$mot1.' composée de '.$mot2.' mots.');
?>
Note
Le caractère \n correspond à un retour à la ligne. A ne pas confondre avec la balise <br /> !
Voici une phrase composée de 8 mots.
Voici une $mot1 composée de $mot2 mots.
Voici une phrase composée de 8 mots.
Voir le résultat généré.
Les tableaux sont un type spécial de variable capable de stocker plus d'une valeur.
Il existe deux types de tableaux en PHP :
Ils contiennent des éléments accessibles via leur indice. Les indices démarrent à 0 en PHP.
Par exemple, votre tableau pourrait contenir :
Clé | Valeur |
---|---|
0 | François |
1 | Michel |
2 | Nicole |
3 | Véronique |
4 | Benoît |
... | ... |
<?php
$prenoms = array ('François', 'Michel',
'Nicole', 'Véronique', 'Benoît');
?>
<?php
$prenoms[0] = 'François';
$prenoms[1] = 'Michel';
$prenoms[2] = 'Nicole';
...
?>
<?php
$prenoms[] = 'François';
$prenoms[] = 'Michel';
$prenoms[] = 'Nicole';
...
?>
Ce code est équivalent au précédent, mais sera moins lisible pour l'accès futur aux éléments du tableau.
<?php
$prenoms[0] = 'François';
$prenoms[1] = 'Michel';
echo($prenom[1]."\n");
echo($prenom[0]."\n");
?>
Voir le résultat.
Ils permettent une représentation plus complexe et détaillée.
Par exemple, votre tableau pourrait contenir :
Clé | Valeur |
---|---|
prenom | François |
nom | Dupont |
adresse | 3 rue du Paradis |
ville | Marseille |
Cette fois, les notion de "clé" et de "valeur" prennent tout leur sens.
<?php
$patronyme = array (
'prenom' => 'François',
'nom' => 'Dupont');
?>
<?php
$patronyme['prenom'] = 'François';
$patronyme['nom'] = 'Dupont';
?>
<?php
$coordonnees['prenom'] = 'François';
$coordonnees['nom'] = 'Dupont';
$coordonnees['adresse'] = '3 Rue du Paradis';
$coordonnees['ville'] = 'Marseille';
echo $coordonnees['ville'];
?>
Voir le résultat.
Le "cast" existe en PHP : il est possible de convertir une variable d'un type à un autre type. Il suffit de préciser le type après conversion entre parenthèses.
Par exemple :
<?php
$a = '5';
$b = ((int) $a) + 2;
echo $b;
?>
Voir le résultat.
Elles permettent de définir des conditions lors de l'éxécution de votre script PHP :
Symbole | Signification |
---|---|
== | Est égal à |
> | Est supérieur à |
< | Est inférieur à |
>= | Est supérieur ou égal à |
<= | Est inférieur ou égal à |
!= | Est différent de |
Note
Le == de la comparaison est à distinguer du symbole d'affectation =.
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php
$longueur_mdp = 6;
if ($longueur_mdp >= 8) { // SI
$save_mdp = true;
} elseif ($longueur_mdp >= 6){ //SINON SI
$save_mdp = true;
echo "Ce mot de passe n'est pas très sûr !\n";
} else { // SINON
echo "Ce mot de passe est trop court !\n";
$save_mdp = false;
}
if($save_mdp){ echo "Mot de passe sauvegardé !"; }
?>
|
Voir le résultat.
Astuce
PHP tolère aussi l'écriture condensée (nommée opérateur ternaire) : $variable = $condition ? valeurSiVrai : valeurSiFaux. Comparée au if, cette écriture permet de réduire le nombre de lignes de code, au détriment de sa lisibilité.
1 2 3 4 5 6 7 8 9 10 | <?php couleur
$couleur = "rouge";
switch ($couleur) {
case "bleu" : $r=0; $g=0; $b=255; break;
case "vert" : $r=0; $g=255; $b=0; break;
case "rouge" : $r=255; $g=0; $b=0; break;
default : $r=0; $g=0; $b=0; break;
}
echo "Valeurs RGB pour $couleur : ($r,$g,$b).";
?>
|
Voir le résultat.
Il est possible de combiner les conditions dans une même instruction :
Symbole | Mot-clé | Signification |
---|---|---|
&& | AND | Et |
|| | OR | Ou |
! | NOT | Négation de la condition |
Exemple :
<?php
if($condition1 && (!$condition2 || $condition3)){
...
}
?>
Il existe trois boucles en PHP :
Elle permet d'éxécuter la même série d'instructions tant que la condition d'arrêt n'est pas vérifiée.
Exemple :
<?php
$nombre_de_lignes = 1;
while ($nombre_de_lignes <= 10) {
echo 'Ceci est la ligne n°' . $nombre_de_lignes . "\n";
$nombre_de_lignes++;
}
?>
Voir le résultat.
Astuce
La bouche do-while existe aussi. Pratique pour s'assurer qu'on rentre au moins une fois dans la boucle.
Elle est très semblable à la boucle while mais permet cette fois de regrouper les conditions initiales, d'arrêt et l'incrémentation.
Exemple :
<?php
for ($nb_lignes = 1; $nb_lignes <= 10; $nb_lignes++)
{
echo 'Ceci est la ligne n°' . $nb_lignes . "\n";
}
?>
Voir le résultat.
Voir le résultat attendu.
Elle permet de simplifier le parcours des tableaux, en permetant une écriture plus lisible et surtout plus générique que :
<?php
$prenoms = array ('François', 'Michel',
'Nicole', 'Véronique', 'Benoît');
for ($numero = 0; $numero < 5; $numero++)
echo $prenoms[$numero] . "\n";
}
?>
Voir le résultat.
<?php
$prenoms = array ('François', 'Michel',
'Nicole', 'Véronique', 'Benoît');
foreach($prenoms as $element) {
echo $element . "\n";
}
?>
Voir le résultat.
<?php
$coordonnees = array (
'prenom' => 'François',
'nom' => 'Dupont',
'adresse' => '3 Rue du Paradis',
'ville' => 'Marseille');
foreach($coordonnees as $champ => $element)
{
echo $champ . ' : ' .$element . "\n";
}
?>
Voir le résultat.
Voir le résultat attendu.
L'utilisation de variables implique la présence d'opérateurs pour pouvoir les manipuler.
PHP comprend une multitude d'opérateurs pour manipuler les variables numériques, booléennes, ou les chaînes de caractères.
PHP reconnait tous les opérateurs arithmétiques classiques :
Exemple | Nom | Résultat |
---|---|---|
-$a | Négation | Opposé de $a. |
$a + $b | Addition | Somme de $a et $b. |
$a - $b | Soustraction | Différence de $a et $b. |
$a * $b | Multiplication | Produit de $a et $b. |
$a / $b | Division | Quotient de $a et $b. |
$a % $b | Modulo | Reste de $a divisé par $b. |
$a ** $b | Exponentielle | Résultat de l'élévation de $a à la puissance $b. Introduit en PHP 5.6. |
Il est possible de modifier une variable lors de son affectation :
Exemple | Nom | Résultat |
---|---|---|
$a=3 | Affectation | $a vaut 3. |
$a += 3 | Addition | $a vaut $a + 3. |
$a -= 3 | Soustraction | $a vaut $a - 3. |
$a *= 3 | Multiplication | $a vaut $a * 3. |
$a /= 3 | Division | $a vaut $a /3. |
$a %= 3 | Modulo | $a vaut $a % 3. |
$a++ | Incrémentation | $a vaut $a + 1. Equivalent à $a += 1. |
$a-- | Décrémentation | $a vaut $a - 1. Equivalent à $a -= 1. |
$b .= "chaine" | Concaténation | $b vaut $b."chaine". |
Les comparaisons de variables sont facilités par des opérateurs spécifiques :
Exemple | Nom | Résultat |
---|---|---|
$a == $b | Egal | TRUE si $a est égal à $b |
$a === $b | Identique | TRUE si $a == $b et qu'ils sont de même type. |
$a != $b | Différent | TRUE si $a est différent de $b |
$a <> $b | Différent | TRUE si $a est différent de $b |
$a !== $b | Différent | TRUE si $a != $b ou types différents. |
$a < $b | Plus petit que | TRUE si $a est strictement plus petit que $b. |
$a > $b | Plus grand | TRUE si $a est strictement plus grand que $b. |
$a <= $b | Inférieur ou égal | TRUE si $a est plus petit ou égal à $b. |
$a >= $b | Supérieur ou égal | TRUE si $a est plus grand ou égal à $b. |
La syntaxe PHP impose l'utilisation du mot-clé function :
<?php
function MaFonction ($parametre1, $parametre2) {
//corps de la fonction
return $valeurRetournee;
}
?>
Note
Les fonctions peuvent ne rien retourner (pas d'instruction return). Par défaut, c'est la valeur NULL est retournée.
<?php
MaFonction('1234', 5678);
?>
Note
Comme le langage PHP n'est pas typé, il est possible d'injecter des types de variables incompatibles dans les fonctions. Il faut donc penser à cette éventualité lors de l'écriture de vos fonctions.
Astuce
Une bonne pratique consiste à définir vos fonctions dans des fichiers séparés, puis de les inclure dans vos pages grâce à la fonction require_once.
Voir le résultat attendu.
PHP propose une multitude de fonctions "toutes prêtes", qui permettent entre autre :
Le site web de PHP référence toutes les fonctions par catégorie.
Il est possible d'utiliser PHP en mode débogage lors de la phase de conception de vos scripts.
Pour cela, deux fonctions doivent être appelées dans le script :
<?php
ini_set(’display_errors’,’1’) ;
error_reporting(E_ALL) ;
... // instructions du script
?>
Astuce
Il est aussi possible de configurer l'affichage des erreurs dans le fichier de configuration php.ini
PHP permet de rediriger l'utilisateur d'une page à une autre grâce à la fonction header(). Exemple :
<?php
header('Location : urlDeRedirection.php?parametres');
exit ();
?>
Astuce
Il est possible de rediriger vers une page via une URL relative ou une URL externe. On peut même faire une redirection vers la même page mais avec des paramètres différents !
Avertissement
La fonction header() doit être exécutée avant toute écriture de texte.
Certaines pages ou certaines sections de votre site web peuvent être privées ou limitées à certains utilisateurs (pages d'administration ...).
Pour cela, il est possible d'utiliser les sessions PHP, mais leur mise en place impose de créer une interface et une table dans la BDD pour gérer les accès.
Une autre possibilité est d'utiliser le contrôle d'accès côté serveur. Cela garantit de limiter l'accès à certains fichiers aux seuls utilisateurs autorisés.
Pour mettre en place un contrôle d'accès, il faut créer deux fichiers :
Note
Chaque fichier .htaccess protège les pages du répertoire dans lequel il se trouve. Pour protéger plusieurs pages, il est donc nécessaire de dupliquer ce fichier, mais il est préférable de le faire pointer sur un fichier .htpasswd unique.
Exemple :
AuthName "Message de l'invité"
AuthType Basic
AuthUserFile "/home/univ-lyon1/pxxxxxxx/
public_html/admin/.htpasswd"
Require valid-user
Le champ AuthName correspond au message affiché lors de la tentative d'accès à une ressource sous contrôle d'accès.
Le champ AuthUserFile est le chemin absolu vers le fichier .htpasswd.
Note
La fonction PHP realpath() permet de récupérer le chemin absolu du fichier .htpasswd.
Le fichier .htpasswd se compose de lignes suivant le format : login:mot_de_passe_crypté.
Il est possible d'afficher les mots de passe en clair. Mais ils sont alors visibles pour qui à les droits de lecture sur le serveur.
Pour crypter les mots de passe du fichier .htpasswd, PHP propose la fonction crypt().
Exemple sans cryptage :
autralian32:kangourou
kikoo69:totolitoto
monuser:monpass
Exemple avec cryptage :
autralian32:$1$nRSP5U.A$e8FqI6QTq/Bp6lNMjBUMO1
kikoo69:$1$riMIdCaV$6GO24RT5v4iwrSzChZq720
monuser:$apr1$MWZtd0xs$mRBeIn.alFLzJZe4.r07U1
Astuce
Comme il est possible de manipuler des fichiers en PHP, il est aussi possible d'écrire les fichiers de contrôle d'accès directement depuis PHP.
Par exemple, un formulaire accessible seulement par l'administrateur pourrait permettre d'ajouter de nouveaux utilisateurs.